跳到主要内容

窗口内信息组织

lost-in-the-middle 的成因机制,以及如何通过布局和裁剪提升中段信息利用率

核心要点

  • 模型对中段信息最不敏感(U 形曲线)
  • 成因:recency/primacy bias + RoPE 衰减 + 训练分布
  • 长文档前置、查询置尾,质量提升最高 30%
  • context rot:质量随上下文长度退化
  • 工具结果裁剪是最低风险的压缩

本文给出 02-核心原则 中"上下文是有限资源"的实证机制与布局对策。

信息放在上下文哪个位置最有效?

核心问题:同一段关键信息,放开头、中间还是结尾,模型表现一样吗?

不一样——模型对中段信息最不敏感,性能呈 U 形曲线[1]。Liu et al. 的实验给出量化数据:GPT-3.5-Turbo 在 20 文档检索中,相关文档放第 1 位准确率约 75.8%,放中间掉到约 53.8%,放末位回升(约 60–70%)。

陷阱:中段准确率(53.8%)甚至低于完全不给文档的基线(56.1%)——把关键信息埋在长上下文中间,比不放还糟。

这条限制决定了下文的布局策略:重要内容要么前置,要么贴近末尾的查询。下一节解释这条 U 形曲线从哪来。

为什么会 lost-in-the-middle?

核心问题:模型为什么偏偏对中段信息不敏感?

U 形曲线是多个机制叠加的结果,头尾强、中间弱各有不同原因[1][2]。理解成因才能针对性布局。

  • recency bias(近因偏置):causal attention 让尾部 token 对生成的影响最直接,所以末位强。
  • primacy bias(首因偏置):首部 token 被所有后续 token 反复关注,所以首位强。
  • RoPE 相对距离衰减:旋转位置编码使注意力信号随相对距离衰减,中间位置与末尾查询之间的信号被削弱[2]
  • 训练分布:长序列在训练数据中稀少,模型缺乏处理大距离依赖的充分经验。
  • n² 注意力:上下文越长,注意力要在越多 token 间分配,中间的信号更易被淹没。

可借鉴的判断:这是模型架构的固有特性,不会靠"提醒模型注意中间"解决——只能靠布局把关键信息搬到头尾。

查询和长文档分别该放哪?

核心问题:一个"长文档 + 问题"的请求,文档和问题谁先谁后?

长文档前置、查询置于末尾,测试中可提升响应质量最高 30%[3]。这正是利用 U 形曲线的尾部优势:把模型要回答的问题放在它注意力最强的位置之一。

配套手段是 XML 标签分节 + quote-grounding(先让模型摘相关引文再答):

例子:多文档的推荐布局——

<documents>
<document index="1">
<source>report-2025.pdf</source>
<document_content>...资料正文...</document_content>
</document>
</documents>
基于以上文档,回答:<问题放最后>

资料在前、标签分隔、查询在尾——标签消除"哪段是资料、哪段是指令"的歧义。

上下文越长,质量为什么还会退化?

核心问题:把更多相关背景塞进上下文,不是应该让模型答得更好吗?

不一定——context rot 指模型表现随上下文长度增加而退化,与内容是否相关无关[4]。Chroma 在 18 个主流模型上验证了这一现象:逻辑连贯的背景反而比随机背景导致更差的检索,部分模型在数千词量级后出现明显行为变化(如拒答)。

这条发现颠覆直觉:更多上下文不等于更好表现。它从实证侧印证了 02-核心原则 的"最小高信号"——往窗口里加内容有真实代价,不是免费的保险。

怎么给臃肿的上下文减负?

核心问题:上下文塞满了,删哪部分风险最低?

按"代价从低到高"分三档减负:工具结果裁剪 → compaction → 子 agent 隔离[5]。Anthropic 的 Context Editing API 把最轻的一档做成了自动机制。

  • 工具结果裁剪(最轻):Anthropic 的 Context Editing 提供 tool result clearing 策略,在上下文超阈值时自动清除最旧的工具原始输出、替换为占位符。这些原始结果(完整文件、冗长 API 返回)一旦被消化、决策已做出,就可安全清除。
  • compaction(中):用摘要替代历史(属记忆系统,见 03-记忆系统/03-compaction)。
  • 子 agent 隔离(重):子任务在独立上下文里做,只回 1-2k token 摘要。

可借鉴的判断:减负要从可重新获取的内容(工具原始输出)先删——它代价最低,因为需要时能重跑工具拿回来。

Takeaway

知识点核心结论
U 形曲线中段最弱(53.8%),甚至低于无文档基线(56.1%)
成因recency/primacy bias + RoPE 衰减 + 训练分布,架构固有
查询置尾长文档前置 + 查询置尾 + XML 分隔,质量提升最高 30%
context rot质量随长度退化,连贯背景未必更好
三档减负工具结果裁剪(自动) → compaction → 子 agent,代价递增

参考资料

  1. Liu et al. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172, 2023. https://arxiv.org/abs/2307.03172
  2. Su et al. RoFormer: Enhanced Transformer with Rotary Position Embedding. arXiv:2104.09864, 2021. https://arxiv.org/abs/2104.09864
  3. Anthropic. Claude prompting best practices (Long context tips). 2025. https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices
  4. Chroma Research. Context Rot: How Increasing Input Tokens Impacts LLM Performance. 2025. https://www.trychroma.com/research/context-rot
  5. Anthropic. Effective context engineering for AI agents / Context editing. 2025. https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents

延伸阅读